home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -seriously_amiga- / shareware / programming / e / easyplugins / source / popasl.e < prev    next >
Text File  |  1997-12-06  |  9KB  |  303 lines

  1. /*
  2. **
  3. ** popasl PLUGIN
  4. **
  5. ** Copyright: Ralph Wermke of Digital Innovations
  6. ** EMail    : wermke@gryps1.rz.uni-greifswald.de
  7. ** WWW      : http://www.user.fh-stralsund.de/~rwermke/di.html
  8. **
  9. ** Version  : 1.0 beta
  10. ** Date     : 10-Nov-1997
  11. **
  12. ** ProgramID: 0007
  13. **
  14. ** History:
  15. **    10-Nov-1997:      [1.0]
  16. **       - initial release
  17. **    15-Nov-1997:      [1.0.1]
  18. **       - object name changed to popasl_plugin
  19. **
  20. */
  21.  
  22. OPT OSVERSION=38
  23. OPT PREPROCESS
  24. OPT MODULE
  25.  
  26. MODULE 'tools/easygui','tools/textlen',
  27.        'graphics/text',
  28.        'intuition/intuition','intuition/gadgetclass',
  29.        'utility/tagitem','utility',
  30.        'gadtools',
  31.        'libraries/gadtools','libraries/asl',
  32.        'asl'
  33.  
  34. EXPORT OBJECT popasl_plugin OF plugin
  35. PRIVATE
  36.    string   : PTR TO CHAR
  37.    type
  38.    disabled
  39.  
  40.    gad_str  : PTR TO gadget
  41.    gad_bt   : PTR TO gadget
  42.    id_str
  43.    id_bt
  44.    bt_width
  45.    bt_text  : PTR TO CHAR
  46.    imsg     : PTR TO intuimessage
  47.  
  48.    ta       : PTR TO textattr
  49. ENDOBJECT
  50.  
  51. -> TAG_USER  | PROG_ID<<16 | TAG_VALUE
  52. -> $80000000 |   $0007<<16 | 0...
  53.  
  54. EXPORT ENUM PLA_PopAsl_Disabled=$80070001,
  55.             PLA_PopAsl_Contents,
  56.             PLA_PopAsl_GadgetID,
  57.             PLA_PopAsl_ButtonText,
  58.             PLA_PopAsl_Type
  59.  
  60. EXPORT ENUM PLV_PopAsl_Type_Drawer=0,
  61.             PLV_PopAsl_Type_File,
  62.             PLV_PopAsl_Type_Font
  63. ->     ,PLV_PopAsl_Type_Screen
  64.  
  65.  
  66. ->-- Constructor/ Destructor ---------------------------------
  67.  
  68. ->>> popasl::popasl (Constructor)
  69. PROC popasl(tags=NIL:PTR TO tagitem) OF popasl_plugin
  70. DEF x
  71.  
  72.    IF utilitybase:=OpenLibrary('utility.library', 37)
  73.       self.disabled  :=GetTagData(PLA_PopAsl_Disabled, FALSE, tags)
  74.       self.string    :=GetTagData(PLA_PopAsl_Contents, '', tags)
  75.       self.id_bt     :=GetTagData(PLA_PopAsl_GadgetID, And(Shr(self,4),$FFFF), tags)
  76.       self.type      :=GetTagData(PLA_PopAsl_Type, PLV_PopAsl_Type_Drawer, tags)
  77.       self.bt_text   :=GetTagData(PLA_PopAsl_ButtonText, NIL, tags)
  78.  
  79.       IF (self.bt_text=NIL)
  80.          x:=self.type
  81.          SELECT x
  82.             CASE PLV_PopAsl_Type_Drawer
  83.                self.bt_text:='Path...'
  84.             CASE PLV_PopAsl_Type_File
  85.                self.bt_text:='File...'
  86.             CASE PLV_PopAsl_Type_Font
  87.                self.bt_text:='Font...'
  88. ->            CASE PLV_PopAsl_Type_Screen
  89. ->               self.bt_text:='Screen...'
  90.             DEFAULT
  91.                Raise("TYPE")
  92.          ENDSELECT
  93.       ENDIF
  94.  
  95.       self.id_str:=self.id_bt+1
  96.  
  97.       CloseLibrary(utilitybase)
  98.    ELSE
  99.       Raise("UTIL")
  100.    ENDIF
  101.  
  102. ENDPROC
  103. -><<
  104.  
  105. ->>> popasl::end (Destructor)
  106. PROC end() OF popasl_plugin
  107.    IF self.string THEN Dispose(self.string)
  108. ENDPROC
  109. -><<
  110.  
  111. ->-- overridden methods --------------------------------------
  112.  
  113. ->>> popasl::will_resize
  114. PROC will_resize() OF popasl_plugin IS RESIZEX
  115. -><<
  116.  
  117. ->>> popasl::min_size
  118. PROC min_size(ta:PTR TO textattr, fh) OF popasl_plugin
  119.    self.bt_width:=textlen(self.bt_text,ta)+8
  120. ENDPROC (self.bt_width+(fh*8)),(fh+6)
  121. -><<
  122.  
  123. ->>> popasl::gtrender
  124. PROC gtrender(gl, vis, ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF popasl_plugin
  125.  
  126.    self.gad_bt:=CreateGadgetA(BUTTON_KIND, gl,
  127.                               [x, y, self.bt_width, ys, self.bt_text, ta, self.id_bt, 0, vis, 0]:newgadget,
  128.                               [GA_DISABLED, self.disabled, TAG_DONE])
  129.  
  130.    self.gad_str:=CreateGadgetA(STRING_KIND, self.gad_bt,
  131.                                [x+self.bt_width+1, y, xs-self.bt_width, ys, NIL, ta, self.id_str, 0, vis, 0]:newgadget,
  132.                                [GA_DISABLED, self.disabled,
  133.                                 GTST_MAXCHARS, 350,
  134.                                 GTST_STRING, self.string,
  135.                                 TAG_DONE])
  136. ENDPROC self.gad_str
  137. -><<
  138.  
  139. ->>> popasl::clear_render
  140. PROC clear_render(win:PTR TO window) OF popasl_plugin
  141. DEF buffer:REG
  142.  
  143.    buffer:=self.gad_str.specialinfo::stringinfo.buffer
  144.    Dispose(self.string)
  145.    self.string:=String(StrLen(buffer)+1)
  146.    StrCopy(self.string, buffer)
  147.  
  148. ENDPROC
  149. -><<
  150.  
  151. ->>> popasl::message_test
  152. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF popasl_plugin
  153.  
  154.    self.imsg:=0
  155.    IF imsg.class=IDCMP_GADGETUP
  156.       IF (imsg.iaddress=self.gad_bt) OR (imsg.iaddress=self.gad_str)
  157.          self.imsg:=imsg
  158.          RETURN TRUE
  159.       ENDIF
  160.    ENDIF
  161.  
  162. ENDPROC FALSE
  163. -><<
  164.  
  165. ->>> popasl::message_action
  166. PROC message_action(class, qual, code, win:PTR TO window) OF popasl_plugin
  167. DEF filereq:PTR TO filerequester, fontreq:PTR TO fontrequester,
  168.     res, len, buffer:REG, tags, x, s1=NIL:PTR TO CHAR, reqtype
  169.  
  170.    IF self.imsg
  171.       buffer:=self.gad_str.specialinfo::stringinfo.buffer
  172.       IF self.imsg.iaddress=self.gad_bt
  173.          IF (aslbase:=OpenLibrary('asl.library', 38))
  174.             self.set(PLA_PopAsl_Disabled, TRUE)
  175.             x:=self.type
  176.             SELECT x
  177.                CASE PLV_PopAsl_Type_Drawer
  178.                   reqtype:=ASL_FILEREQUEST
  179.                   tags:=[ASLFR_WINDOW, win,
  180.                          ASLFR_SLEEPWINDOW, TRUE,
  181.                          ASLFR_TITLETEXT, 'Select Drawer',
  182.                          ASLFR_INITIALDRAWER, buffer,
  183.                          ASLFR_DRAWERSONLY, TRUE,
  184.                          TAG_DONE]
  185.                CASE PLV_PopAsl_Type_File
  186.                   reqtype:=ASL_FILEREQUEST
  187.                   s1:=PathPart(buffer)-1
  188.                   s1:=String(len:=(s1-buffer)+2)
  189.                   StrCopy(s1, buffer, len-1)
  190.                   tags:=[ASLFR_WINDOW, win,
  191.                          ASLFR_SLEEPWINDOW, TRUE,
  192.                          ASLFR_TITLETEXT, 'Select File',
  193.                          ASLFR_INITIALFILE, FilePart(buffer),
  194.                          ASLFR_INITIALDRAWER, s1,
  195.                          TAG_DONE]
  196.                CASE PLV_PopAsl_Type_Font
  197.                   reqtype:=ASL_FONTREQUEST
  198.                   s1:=PathPart(buffer)
  199.                   len:=s1-buffer
  200.                   IF len  -> name/size
  201.                      s1:=String(len)
  202.                      StrCopy(s1, buffer,len)
  203.                   ELSE    -> name
  204.                      s1:=String(StrLen(buffer)+2)
  205.                      StrCopy(s1, buffer)
  206.                   ENDIF
  207.                   x:=Val(FilePart(buffer), {len})
  208.                   tags:=[ASLFO_WINDOW, win,
  209.                          ASLFO_SLEEPWINDOW, TRUE,
  210.                          ASLFO_TITLETEXT, 'Select Font',
  211.                          ASLFO_INITIALNAME, s1,
  212.                          ASLFO_INITIALSIZE, IF len>0 THEN x ELSE 8,
  213.                          TAG_DONE]
  214.             ENDSELECT
  215.             IF (filereq:=AllocAslRequest(reqtype, NIL))
  216.                res:=AslRequest(filereq, tags)
  217.  
  218.                IF res
  219.                   Dispose(self.string)
  220.  
  221.                   x:=self.type
  222.                   SELECT x
  223.                      CASE PLV_PopAsl_Type_Drawer
  224.                         self.string:=String(StrLen(filereq.drawer)+1)
  225.                         StrCopy(self.string, filereq.drawer)
  226.                      CASE PLV_PopAsl_Type_File
  227.                         self.string:=String(len:=(StrLen(filereq.drawer)+StrLen(filereq.file)+2))
  228.                         StrCopy(self.string, filereq.drawer)
  229.                         AddPart(self.string, filereq.file, len)
  230.                         SetStr(self.string, StrLen(self.string))
  231.                      CASE PLV_PopAsl_Type_Font
  232.                         fontreq:=filereq
  233.                         self.string:=String(StrLen(fontreq.attr::textattr.name)+1+6)
  234.                         StringF(self.string, '\s/\d', fontreq.attr::textattr.name,fontreq.attr::textattr.ysize)
  235.                   ENDSELECT
  236.  
  237.                   Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  238.                ENDIF
  239.                FreeAslRequest(filereq)
  240.             ELSE
  241.                Raise("AREQ")
  242.             ENDIF
  243.             self.set(PLA_PopAsl_Disabled, FALSE)
  244.             CloseLibrary(aslbase)
  245.          ELSE
  246.             Raise("ASL")
  247.          ENDIF
  248.          IF s1 THEN Dispose(s1)
  249.          -> don't call action function on cancel
  250.          IF res=0 THEN RETURN FALSE
  251.       ELSE
  252.          IF self.imsg.iaddress=self.gad_str
  253. ->            IF code=9
  254. ->            ELSE
  255.                Dispose(self.string)
  256.                self.string:=String(StrLen(buffer)+1)
  257.                StrCopy(self.string, buffer)
  258. ->            ENDIF
  259.          ENDIF
  260.       ENDIF
  261.    ENDIF
  262.  
  263. ENDPROC TRUE
  264. -><<
  265.  
  266. ->-- new methods ---------------------------------------------
  267.  
  268. ->>> popasl::set
  269. PROC set(attr, value) OF popasl_plugin
  270. DEF x
  271.  
  272.    SELECT attr
  273.       CASE PLA_PopAsl_Disabled
  274.          self.disabled:=value
  275.          Gt_SetGadgetAttrsA(self.gad_bt,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  276.          Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  277.       CASE PLA_PopAsl_Contents
  278.          IF value
  279.             Dispose(self.string)
  280.             self.string:=String(StrLen(value)+1)
  281.             StrCopy(self.string, value)
  282.             Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  283.          ENDIF
  284.    ENDSELECT
  285.  
  286. ENDPROC
  287. -><<
  288.  
  289. ->>> popasl::get
  290. PROC get(attr) OF popasl_plugin
  291.  
  292.    SELECT attr
  293.       CASE PLA_PopAsl_Disabled
  294.          RETURN self.disabled, TRUE
  295.       CASE PLA_PopAsl_Contents
  296.          self.clear_render(NIL)      -> copy input buffer to self.string
  297.          RETURN self.string, TRUE
  298.    ENDSELECT
  299.  
  300. ENDPROC -1, FALSE
  301. -><<
  302.  
  303.